package com.escape.subject.common.entity;

import lombok.Data;

import java.io.Serializable;
import java.util.Collections;
import java.util.List;

/**
 * @Author: escape_zebra
 * @CreateTime: 2024-12-26  18:06
 * @Description: TODO
 * @Version: 1.0
 */
@Data
public class PageResult<T> implements Serializable {

    private Integer pageNo = 1;
    private Integer pageSize = 20;
    private Integer total = 0;
    private Integer totalPages = 0;
    private List<T> result = Collections.emptyList();
    private Integer start = 1;
    private Integer end = 0;

    public void setRecords(List<T> result){
        this.result = result;
        if (result != null && !result.isEmpty()) {
            setTotal(result.size());
        }
    }

    public void setTotal(Integer total){
        this.total = total;
        if (this.pageSize > 0) {
            this.totalPages = (total / this.pageSize) + (total % this.pageSize == 0 ? 0 : 1);
            /*
                - 使用total / pageSize计算出基本的页数。
                - 使用 total % pageSize 检查是否有余数，如果有余数（即最后一页不满），则总页数需要加1。
             */
        } else {
            this.totalPages = 1;
            /*
                如果 pageSize 不大于0（即没有设置有效的每页记录数），
                则将 totalPages 设置为 1，
                这意味着所有记录都在第一页。
             */
        }
        this.start = (this.pageSize > 0 ? (this.pageNo - 1) * this.pageSize : 0) + 1;
        /*
            举例：
                第三页 3 - 1 = 2 --> 2 * 10 = 20 --> 20 + 1 = 21
                第一页 1 - 1 = 2 --> 0 * 10 = 0  --> 0  + 1 = 1
         */
        this.end = (this.start - 1 + this.pageSize * (this.pageNo > 0 ? 1 : 0));
        /*
            举例：
                第三页 21 - 1 = 20 --> 20 + 10 = 30
                第一页 1  - 1 = 0  --> 0  + 10 = 10
         */
    }
}
